package com.biubiu.biubiuexam.controller;


import cn.dev33.satoken.stp.StpUtil;
import com.biubiu.biubiuexam.common.lang.Result;
import com.biubiu.biubiuexam.services.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 学生相关 controller
 */
@RestController
public class StudentController {

    private final StudentService studentService;

    /**
     * 自动装配构造函数
     *
     * @param studentService StudentService 的实例
     */
    @Autowired
    public StudentController(StudentService studentService) {
        this.studentService = studentService;
    }

    /**
     * 获取自己的所有班级接口
     *
     * @return 自己的所有班级
     */
    @GetMapping("/student/getMyAllClasses")
    public Result getAllClazzOfStudent() {
        if (!StpUtil.isLogin()) {
            return Result.fail(402, "未登录！", null);
        }

        if (!StpUtil.hasRole("student")) {
            return Result.fail(405, "您不是学生！", null);
        }

        return studentService.getAllClazzOfStudent(StpUtil.getLoginIdAsLong());
    }

    /**
     * 加入班级接口
     *
     * @param code 班级邀请码
     * @return 结果
     */
    @PostMapping("/student/joinClass")
    public Result joinClazz(@RequestBody String code) {
        if (!StpUtil.isLogin()) {
            return Result.fail(402, "未登录！", null);
        }

        if (!StpUtil.hasRole("student")) {
            return Result.fail(405, "您不是学生！", null);
        }

        return studentService.joinClazz(StpUtil.getLoginIdAsLong(), code);
    }

    /**
     * 退出班级接口
     *
     * @param code 班级邀请码
     * @return 结果
     */
    @PostMapping("/student/exitClass")
    public Result exitClazz(@RequestBody String code) {
        if (!StpUtil.isLogin()) {
            return Result.fail(402, "未登录！", null);
        }

        if (!StpUtil.hasRole("student")) {
            return Result.fail(405, "您不是学生！", null);
        }

        return studentService.exitClazz(StpUtil.getLoginIdAsLong(), code);
    }

    /**
     * 获取自己的所有考试接口
     *
     * @return 自己的所有考试
     */
    @GetMapping("/student/getMyAllExams")
    public Result getMyAllExams() {
        if (!StpUtil.isLogin()) {
            return Result.fail(402, "未登录！", null);
        }
        if (!StpUtil.hasRole("student")) {
            return Result.fail(405, "您不是学生！", null);
        }

        return studentService.getMyAllExams(StpUtil.getLoginIdAsLong());
    }

    /**
     * 获取某次考试的所有问题接口
     *
     * @param link 考试链接
     * @return 这次考试的所有问题
     */
    @GetMapping("/student/getExamAllQuestions")
    public Result getExamAllQuestions(@RequestParam String link) {
        if (!StpUtil.isLogin()) {
            return Result.fail(402, "未登录！", null);
        }
        if (!StpUtil.hasRole("student")) {
            return Result.fail(405, "您不是学生！", null);
        }

        return studentService.getExamAllQuestions(StpUtil.getLoginIdAsLong(), link);
    }


}
